<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script>
    // 构造函数  就是把我们对象里面一些相同的属性和方法抽象出来封装到函数里面
    // 我们利用构造函数创建对象的过程也称为对象实例化

    // new 关键字执行过程
    // 1.new 构造函数可以在内存中创建了一个空的对象
    // 2.this 就会指向刚刚创建的空对象
    // 3.执行构造函数里面的代码，给这个空对象添加属性和方法
    // 4.返回这个对象（所以构造函数不需要 return）

    // 构造函数的语法格式
    // function 构造函数名() {
    //   this.属性 = 值;
    //   this.方法 = function() {}
    // }
    // new 构造函数名();

    function Star (uname, age, sex) {
      this.name = uname;
      this.age = age;
      this.sex = sex;
      this.sing = function (sang) {
        console.log(sang);
      }
    }
    var ldh = new Star('刘德华', 18, '男'); // 调用函数返回的是一个对象
    console.log(ldh.name);
    console.log(ldh['sex']);
    ldh.sing('冰雨');

    var gfc = new Star('郭富城', 18, '男');
    console.log(gfc.name);
    console.log(gfc.age);
    gfc.sing('李兰香');

    // 1.构造函数名字首字母要大写
    // 2.我们构造函数不需要 return 就可以返回结果
    // 3.我们调用构造函数，必须使用 new
    // 4.我们只要new Star() 调用函数就创建一个对象 ldh {}
    // 5.我们的属性和方法前面必须添加 this
  </script>
</head>

<body>

</body>

</html>